/**
  * 抽奖相关数据的store
  * @author: Ruan Jiazhen
  * @date: 2024-04-29 10:26:32
* */
// 已弃用，考虑删除

import { defineStore } from 'pinia';
import { ref } from 'vue';
import { requestDanmuInfos, requestLottery } from '@/api/api-lottery';
import { activity520EndTime, activity520StartTime, defaultPrizeList, prizeImgMap, prizeList520, prizeTypeMap } from '@/static/constant/lottery-constant';
import { isBetweenTime } from '@/utils/tools';

export const useLottery = defineStore('lottery', () => {
  // 当前显示弹窗类型
  const popupType = ref<PopupType>('no');
  // const popupType = ref<PopupType>('winning')
  const changePopupType = (type: PopupType) => {
    popupType.value = type;
  };
  /** 是否显示中奖动画 */
  const winningAniVisible = ref(false);

  // 抽奖结果
  const lotteryResult = ref<LotteryResult>({
    prizeType: 'normal',
    prizeName: '',
    prizeImg: '',
  });

  // 上一次抽奖时间
  const lastLotteryTime = ref(0);
  /**
   * 抽奖
   * @returns void
   * @description 先将弹窗关闭，抽奖成功后，弹出中奖弹窗
   */
  const toLottery = () => {
    // 判断上一次抽奖时间，如果小于1秒，说明过于频繁，弹出请稍后
    if (Date.now() - lastLotteryTime.value < 1000) {
      uni.showToast({
        title: '请稍后',
        icon: 'none',
      });
      return;
    }

    // 关闭弹窗
    changePopupType('no');
    requestLottery().then((res) => {
      const resData: LotteryResData = res.data;
      // 判断code，如果是201，说明喵豆不足，弹出喵豆不足弹窗
      if (resData.data.code === '201') {
        changePopupType('miaodou-not-enough');
        return;
      }
      // 如果是203，说明过于频繁，弹出过于频繁弹窗
      if (resData.data.code === '203') {
        uni.showToast({
          title: '操作太频繁',
          icon: 'none',
        });
        return;
      }

      // 如果是200，说明抽奖成功，播放中奖动画，中奖弹窗是在lottery.vue中监听动画结束后弹出的，不在这里控制
      console.log('抽奖结果', resData.data.LotteryInfo);
      lastLotteryTime.value = Date.now();
      lotteryResult.value = {
        prizeName: resData?.data?.LotteryInfo?.title ?? '',
        prizeImg: resData?.data?.LotteryInfo?.type ? prizeImgMap?.[resData.data.LotteryInfo.type] : '',
        prizeType: resData?.data?.LotteryInfo?.type ? prizeTypeMap?.[resData.data.LotteryInfo.type] : 'normal',
      };
      winningAniVisible.value = true;
    });
  };

  // 奖品列表
  const prizeList = ref(defaultPrizeList);

  /** 获取奖品列表 */
  const getPrizeList = () => {
    // 根据时间判断是否是活动时间，如果是活动时间，奖品列表为520活动奖品列表
    if (isBetweenTime(activity520StartTime, activity520EndTime)) {
      prizeList.value = prizeList520;
    }
  };

  // 获取中奖弹幕信息
  const getDanmuInfos = () => new Promise((resolve, reject) => {
    requestDanmuInfos().then((res) => {
      console.log(res);
      resolve(res);
    }).catch((err) => {
      reject(err);
    });
  });
  return {
    popupType,
    winningAniVisible,
    changePopupType,
    lotteryResult,
    toLottery,
    prizeList,
    getPrizeList,
    getDanmuInfos,
  };
});
